Пульт.Онлайн /

Высокочастотные тренды

Включение расширенного режима с поддержкой микросекунд
Высокочастотная запись трендов через API
Производительность в экспериментальных условиях


Включение расширенного режима с поддержкой микросекунд

В обычном режиме тренды в SCADA Пульт.Онлайн хранят записи с миллисекундной точностью. Размер записи - 16 байт.

Формат записи в файле трендов с миллисекундной точностью:

|----------------------------------16B-------------------------->|
|<-----32b------>|<--6b-->|<--10b-->|<--16b-->|<------64b------->|
|----------------|--------|---------|---------|------------------|
|    timestamp   | errcnt |   ms    |  error  |      value       |
|----------------|--------|---------|---------|------------------|
|     uint32     |  uint8 | uint16  |  int16  |    dbl_IEEE754   |
|----------------|--------|---------|---------|------------------|

timestamp - timestamp в секундах
errcnt - счетчик ошибок на интервале
ms - миллисекунды
error - код ошибки (если есть)
value - значение переменной

Для записи трендов с микросекундной точностью необходимо включить в настройках сервиса trends параметр extended_format=1 (расширенный формат). Размер записи в расширенном формате - 20 байт.

Формат записи в файле трендов с микросекундной точностью:

|------------------------------------20B---------------------------------->|
|<-----32b------>|<-12b-->|<--20b-->|<--16b-->|<------64b------->|<--16b-->|
|----------------|--------|---------|---------|------------------|---------|
|    timestamp   | errcnt |   us    |  error  |      value       | RESERVD |
|----------------|--------|---------|---------|------------------|---------|
|     uint32     |  uint8 | uint16  |  int16  |    dbl_IEEE754   |  ?????  |
|----------------|--------|---------|---------|------------------|---------|

timestamp - timestamp в секундах
errcnt - счетчик ошибок на интервале
us - микросекунды
error - код ошибки (если есть)
value - значение переменной
RESERVD - не используется

Параметр extended_format необходимо установить до начала записи любых трендов, т.к файлы разных форматов несовместимы!


Высокочастотная запись трендов через API

  1. Подключитесь к сервису trends по WebSocket (порт по умолчанию 11301)

  2. Выполните JSON-RPC2.0 запрос вида:

     {
         "jsonrpc": "2.0",
         "id": "1",
         "method": "write",
         "params": [
             ["<var_name>", <time>, <value>, <error>],
             ...
             ["<var_name>", <time>, <value>, <error>]
         ]
     }
    

    Параметры запроса

    • var_name (string): глобальное имя переменной
    • time (double): время в формате timestamp с миллисекундами с дробной частью
    • value (double): значение переменной
    • error (int, опционально): код ошибки (если есть)

    Пример

     {
         "jsonrpc": "2.0",
         "id": "1",
         "method": "write",
         "params": [
             ["P1_N1_var1", 1749261578999.101, 12.345, 0],
             ["P1_N1_var2", 1749261578999.102, 34.567, 0],
             ["P1_N1_var3", 1749261578999.103, 56.789, 0]
         ]
     }
    

Производительность в экспериментальных условиях

Тест 1

Конфигурация оборудования:

  • Linux Ubuntu 24.04
  • CPU Intel Core i5-12400 (2.5 ГГц / 4.4 ГГц в Turbo)
  • SSD Kingston SFYRSK1000G (7300 МБ/с чтение, 6000 МБ/с запись)
  • RAM 32 GB DDR5

Формат записи:

  • Запись сторонним приложением через API сервиса trends
  • Сервис trends в режиме extended_format=1
  • 20 переменных, 80.000 сигналов в секунду каждая

Результат:

  • 1.600.000 записей в секунду
  • Потребление памяти сервисом trends - 300 МБ
  • Загрузка процессора сервисом trends - 1 ядро, 70% загрузки

Тест 2

Конфигурация оборудования:

  • Linux Ubuntu 24.04
  • CPU Intel Core i7-3770K (3.5 ГГц)
  • SSD Kingston SKC600512G (550 МБ/с чтение, 520 МБ/с запись)
  • RAM 32 GB DDR3

Формат записи:

  • Запись значений переменных
  • Сервис trends в режиме extended_format=0
  • 3000 переменных, 1000 сигналов в секунду каждая

Результат:

  • 3.000.000 записей в секунду
  • Потребление памяти сервисом trends - 500 МБ
  • Загрузка процессора сервисом trends - 1 ядро, 80% загрузки

Вывод трендов в интерфейсе (Тест 1)

  Email
  SMS
   fdb_list
   fdb_load
   fdb_move
   fdb_paths
   node_list
   subscribe
   var_get
   var_list
   var_set